package com.review.Demo_4_脏读;
/**
 * 业务整体需要使用完整的synchronized，保持业务的原子性----在设置值的时候，不希望去取值，所以两个方法用同一把锁
 * @author alienware
 *
 */
public class DirtyRead {

	private String username = "aa";
	private String password = "12";
	
	public synchronized void setValue(String username, String password){
		this.username = username;
		
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		this.password = password;
		
		System.out.println("setValue最终结果：username = " + username + " , password = " + password);
	}
	
	//public synchronized void getValue(){
	public void getValue(){
		System.out.println("getValue方法得到：username = " + this.username + " , password = " + this.password);
	}
	
	
	public static void main(String[] args) throws Exception{//包含主线程和t1线程
		
		final DirtyRead dr = new DirtyRead();
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				dr.setValue("bb", "34");		
			}
		});
		t1.start();
		Thread.sleep(1000);//主线程等一秒
		
		dr.getValue();
	}
	
	
	
}
